From c55f69e5c4e490071075b3a8f53188d7ac25df26 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roger=20Pau=20Monn=C3=A9?= Date: Tue, 10 Nov 2015 12:06:28 +0100 Subject: [PATCH] x86: allow disabling the emulated PIT MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roger Pau Monné Reported by: Boris Ostrovsky Acked-by: Jan Beulich --- xen/arch/x86/hvm/i8254.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/xen/arch/x86/hvm/i8254.c b/xen/arch/x86/hvm/i8254.c index 8a93c88cf2..b517cd636b 100644 --- a/xen/arch/x86/hvm/i8254.c +++ b/xen/arch/x86/hvm/i8254.c @@ -382,6 +382,9 @@ static uint32_t pit_ioport_read(struct PITState *pit, uint32_t addr) void pit_stop_channel0_irq(PITState *pit) { + if ( !has_vpit(current->domain) ) + return; + TRACE_0D(TRC_HVM_EMUL_PIT_STOP_TIMER); spin_lock(&pit->lock); destroy_periodic_time(&pit->pt0); @@ -393,6 +396,9 @@ static int pit_save(struct domain *d, hvm_domain_context_t *h) PITState *pit = domain_vpit(d); int rc; + if ( !has_vpit(d) ) + return 0; + spin_lock(&pit->lock); rc = hvm_save_entry(PIT, 0, h, &pit->hw); @@ -407,6 +413,9 @@ static int pit_load(struct domain *d, hvm_domain_context_t *h) PITState *pit = domain_vpit(d); int i; + if ( !has_vpit(d) ) + return -ENODEV; + spin_lock(&pit->lock); if ( hvm_load_entry(PIT, h, &pit->hw) ) @@ -437,6 +446,9 @@ void pit_reset(struct domain *d) struct hvm_hw_pit_channel *s; int i; + if ( !has_vpit(d) ) + return; + TRACE_0D(TRC_HVM_EMUL_PIT_STOP_TIMER); destroy_periodic_time(&pit->pt0); pit->pt0.source = PTSRC_isa; @@ -458,6 +470,9 @@ void pit_init(struct domain *d, unsigned long cpu_khz) { PITState *pit = domain_vpit(d); + if ( !has_vpit(d) ) + return; + spin_lock_init(&pit->lock); if ( is_hvm_domain(d) ) @@ -473,6 +488,9 @@ void pit_deinit(struct domain *d) { PITState *pit = domain_vpit(d); + if ( !has_vpit(d) ) + return; + TRACE_0D(TRC_HVM_EMUL_PIT_STOP_TIMER); destroy_periodic_time(&pit->pt0); } -- 2.30.2